/**
 * 
 */
package ar.org.tesis.comparticion.conocimientos.utils;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.dozer.DozerBeanMapper;
import org.springframework.oxm.XmlMappingException;
import org.springframework.oxm.xstream.XStreamMarshaller;
import org.springframework.xml.transform.StringResult;

import ar.org.tesis.comparticion.conocimientos.informacion.Mensaje;
import ar.org.tesis.comparticion.conocimientos.informacion.Teoria;
import ar.org.tesis.comparticion.conocimientos.informacion.beans.TeoriaBean;

/**
 * @author Marcelo
 *
 */
public final class XstreamUtils {

	private static final Logger logger = Logger.getLogger(XstreamUtils.class);
	private XstreamUtils() {
		// TODO Auto-generated constructor stub
	}
	
	public static final Mensaje getMensaje(String msgQueue){
		msgQueue=StringUtils.replace(msgQueue,"(*NAMESPACE*)"," ");
		logger.debug("mensaje de la cola "+msgQueue);
		final XStreamMarshaller xStreamMarshaller=((XStreamMarshaller)ApplicationContextProvider.getService("mensajeMarshaller"));
		final Mensaje mensaje=(Mensaje)xStreamMarshaller.getXStream().fromXML(msgQueue);
		return mensaje;
	}
	
	public static final TeoriaBean getTeoriaBean(final String mensaje){
		logger.debug("teoria "+mensaje);
		final XStreamMarshaller xStreamMarshaller=((XStreamMarshaller)ApplicationContextProvider.getService("teoriaBeanMarshaller"));
		final TeoriaBean teoriaBean=(TeoriaBean)xStreamMarshaller.getXStream().fromXML(mensaje);
		return teoriaBean;
	}
	
	public static final String getTeoriaStr(final TeoriaBean teoriaBean) throws XmlMappingException, IOException{
		if(teoriaBean!=null){
			logger.debug("id de teoria "+teoriaBean.getId());
			Teoria teoria=new Teoria();
			((DozerBeanMapper)ApplicationContextProvider.getService("dozerBeanMapper")).map(teoriaBean, teoria);
			
			final XStreamMarshaller xStreamMarshaller=((XStreamMarshaller)ApplicationContextProvider.getService("teoriaMarshaller"));
			StringResult result = new StringResult();
			xStreamMarshaller.marshal(teoria, result);
			logger.debug("string de teoria\n "+result.toString());
			return result.toString();
		}
		return "";
	}
	
	public static final String getTeoriasStr(final List<TeoriaBean> teoriaBeans) throws XmlMappingException, IOException{
		if(teoriaBeans!=null && teoriaBeans.size()>0){
			List<Teoria> teorias=new ArrayList<Teoria>();
			
			for (TeoriaBean teoriaBean : teoriaBeans) {
				Teoria teoria=new Teoria();
				((DozerBeanMapper)ApplicationContextProvider.getService("dozerBeanMapper")).map(teoriaBean, teoria);
				String fechaPars=StringUtils.replace(teoria.getFecha()," ","(*NAMESPACE*)");
				teoria.setFecha(fechaPars);
				teorias.add(teoria);
			}
			
			
			final XStreamMarshaller xStreamMarshaller=((XStreamMarshaller)ApplicationContextProvider.getService("teoriaMarshaller"));
			StringResult result = new StringResult();
			xStreamMarshaller.marshal(teorias, result);
			logger.debug("string de teoria\n "+result.toString());
			return result.toString();
		}
		return "";
	}
}
